Macのsedで単語境界の正規表現を利用する方法
- t_o_dと申します。
- 業務等でsedを利用する際に、単語として置換処理を行うことは多いです。
- その際に利用できる正規表現として単語境界を表す
\b
がありますが、Mac標準のsedでは対応していません。 - そこで今回はMac標準のsedで単語境界の正規表現を利用する方法を記録します。
環境
- mac OS Monterey 12.3.1
結果
- 結果の記述は以下の通りです。
- ※Mac標準のsed以外(GNU等)では動作しない場合があります。
# 例 : データ1 $ cat data1 30,50,100,150,250 40,50,150,50,250 # データ1の中から50のみを70へ置換。 $ cat data1 | sed 's/[[:<:]]50[[:>:]]/70/g' 30,70,100,150,250 40,70,150,70,250 # 例 : データ2 $ cat data2 id,name,second_name,score 1,tod,t_o_d,100 # データ1の中からnameのみをfirst_nameへ置換。 $ cat data2 | sed 's/[[:<:]]name[[:>:]]/first_name/g' id,first_name,second_name,score 1,tod,t_o_d,100
内容
- 上記の結果例は、任意のデータに対して置換を行う処理です。
- こちらで利用している方法は、単語を[[:<:]]単語[[:>:]]のように囲むということです。
- [[:<:]]及び[[:>:]]は
\b
のように単語境界を示す正規表現です。 - こちらは対象語の前後に英数字かアンダースコアが存在しない時にマッチします。
- ※そのため日本語には対応していないようです。
参考
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。